Em Elixir, o cálculo é visto como uma série de transformações fundamentais. Os dados são imutáveis, e o operador = não é para atribuição, mas para correspondência de padrões.
1. O Operador de Correspondência
A correspondência permite ligar valores a padrões. Se a estrutura do lado esquerdo não corresponder ao direito, a transformação falha. O Elixir usa operadores especializados para fluxo de dados: Aritmética (+, -, *, /), Comparação (===, !==, >=), e Junção (<> para strings, ++ para listas).
2. A Expressão 'with'
A with expressão coordena transformações de múltiplos passos onde o sucesso é condicional. Ela permite encadear correspondências usando <-. Diferentemente do operador de correspondência =, se uma correspondência em <- falha, a expressão retorna o valor que não corresponde, em vez de levantar um erro.
3. Escopo e Sintaxe
Por trás dos panos, with é tratado como um macro ou chamada de função. Variáveis vinculadas dentro dele não vazam para o escopo externo. A sintaxe como media = with contagem = ..., do: soma/contagem é a forma baseada em expressões para calcular valores derivados.
$$\text{média} = \frac{\sum_{i=1}^{n} x_i}{n}$$